package br.com.pattern.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.pattern.model.Categoria;

public class CategoriaDao extends GenericDao{

	protected CategoriaDao(ConnectionDataBaseGeneric connectionDataBaseGeneric) {
		super(connectionDataBaseGeneric);
	}
	
	public void salvar(Categoria categoria){
		String insert = "INSERT INTO categorias(titulo_categoria, descricao_categoria) VALUES(?,?)";

		save(insert, categoria.getTitulo_categoria(), categoria.getDescricao_categoria());
	}

	public void alterar(Categoria categoria){

		String update = "UPDATE categorias SET titulo_categoria=?, descricao_categoria=? WHERE id=?";

		update(update, categoria.getTitulo_categoria(), categoria.getDescricao_categoria(), categoria.getId());
	}

	public void excluir(Categoria categoria){

		String delete = "DELETE FROM categorias WHERE id = ?";

		delete(delete, categoria.getId());
	}

	public List<Categoria> listaCategorias(){

		List<Categoria> lista = new ArrayList<Categoria>();

		String select = "SELECT * FROM categorias";

		try{
			
			PreparedStatement pstmt = getConnection().prepareStatement(select);
			ResultSet rs = pstmt.executeQuery();

			while(rs.next()){
				Categoria categoria = new Categoria();

				categoria.setId(rs.getLong("id"));
				categoria.setTitulo_categoria(rs.getString("titulo_categoria"));
				categoria.setDescricao_categoria(rs.getString("descricao_categoria"));			

				lista.add(categoria);
			}

			rs.close();
			pstmt.close();
			
		}catch(SQLException e){
			e.printStackTrace();
		}

		return lista;
	}
	
	public Categoria findByTitulo(String titulo) {

		String select = "SELECT * FROM categorias WHERE titulo_categoria = ?";

		Categoria categoria = null;

		try{
			
			PreparedStatement stmt = getConnection().prepareStatement(select);		
			stmt.setString(1, titulo);

			ResultSet rs = stmt.executeQuery();		 

			while (rs.next()) {		
				categoria = new Categoria();
				
				categoria.setId(rs.getLong("id"));
				categoria.setTitulo_categoria(rs.getString("titulo_categoria"));
				categoria.setDescricao_categoria(rs.getString("descricao_categoria"));
			}		 

			rs.close();		
			stmt.close();
			
		}catch(SQLException e){
			e.printStackTrace();
		}

		return categoria;

	}
}
